package org.ala.tcp_feign_common.spring.annotations;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.core.annotation.AliasFor;


/**
 * tcp版feignclient客户端
 *
 * @author 骆毅(ala)
 * @date 2024年4月20日
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface TcpFeignClient {

	
	/**
	 * 目标服务名称
	 * <p>	根据此名称从eureka中拿远程主机信息
	 * <p>	与host，port不能同时为空
	 */
	@AliasFor("name")
	String value() default "";
	/**
	 * 目标服务名称
	 */
	@AliasFor("value")
	String name() default "";
	
	
	/**
	 * 远程主机host
	 * <p>	与name不能同时为空
	 * <p>	格式{host}:{port}:{username}:{password};{host2}:{port2}:{username}{password}
	 * <p>		例如：127.0.0.1:50016:admin:admin;localhost:50017:admin:admin
	 */
	String hosts() default "";
	
	
	/**
	 * 本地bean名称，不配默认类名
	 */
	String contextId() default "";
	
	
	/**
	 * 根url
	 */
	String path() default "";
	
	
	/**
	 * 是否专线
	 * <p>	true: 给该client专门建一个链接。用于高并发的client，而且对面服务端最好也是私有线程池
	 * <p>	false: name|host相同的client会共享链接
	 */
	boolean idDedicated() default false;
	
	
	/**
	 * 本地熔断，暂未实现
	 */
	@Deprecated
	Class<?> fallback() default void.class;
	/**
	 * 本地熔断，暂未实现
	 */
	@Deprecated
	Class<?> fallbackFactory() default void.class;
}
